//桶排序
//1、创建桶
//2、遍历数据，向对应编号的桶灌水
//3、把所有有水的桶的编号取出
var arr = [3, 1, 9, 45, 2, 5];
document.write("原数组：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"+ arr );
document.write('<br/>');
// console.log(arr);
function bucketSort(arr,flag) {
    var buck = [];    //创建桶
    // console.log(arr.length);
    for (var i = 0; i < arr.length; i++) {
        var item = arr[i];       //进行下标的赋值
        buck[item] = 'paopao';      //填充桶
    }
    // console.log(buck.length);
    // console.log(buck);

    arr.length = 0;
    for (var index in buck) {       //遍历数组对象的下标
        arr.push(parseInt(index));
        // arr.unshift(parseInt(index));   //第二种方法：unshift()使用头部插入，flag=1为降序，flag = 2为升序
        // arr.push(index);
    }
    // console.log(arr);
    if(flag == 1){          //flag为1升序
        return arr;
    }
    else if(flag == 2){     //flag为2降序
        return arr.reverse();
    }


}
document.write("排序后的数组："+ bucketSort(arr,1));   //进行升序 降序的封装，默认为升序


unction bucketSort(arr, bucketSize) {
    if (arr.length === 0) {
        return arr;
    }
    var i;
    var minValue = arr[0];
    var maxValue = arr[0];
    for (i = 1; i < arr.length; i++) {
        if (arr[i] < minValue) {
            minValue = arr[i];               // 输入数据的最小值
        }else if (arr[i] > maxValue) {
            maxValue = arr[i];               // 输入数据的最大值
        }
    }
    // 桶的初始化
    var DEFAULT_BUCKET_SIZE = 5;           // 设置桶的默认数量为5
    bucketSize = bucketSize || DEFAULT_BUCKET_SIZE;
    var bucketCount = Math.floor((maxValue - minValue) / bucketSize) + 1;
    var buckets =new Array(bucketCount);
    for (i = 0; i < buckets.length; i++) {
        buckets[i] = [];
    }
    // 利用映射函数将数据分配到各个桶中
    for (i = 0; i < arr.length; i++) {
        buckets[Math.floor((arr[i] - minValue) / bucketSize)].push(arr[i]);
    }
    arr.length = 0;
    for (i = 0; i < buckets.length; i++) {
        insertionSort(buckets[i]);                     // 对每个桶进行排序，这里使用了插入排序
        for (var j = 0; j < buckets[i].length; j++) {
            arr.push(buckets[i][j]);
        }
    }
    return arr;
}


let array = randomArray(1,100);			console.log(array);			let sortArray = bucketSort(array, array.length);			console.log(sortArray);			function bucketSort(arr, bucketSize) {				　　if (arr.length === 0) {					　　　　return arr;				　　}				　　var i;				　　var minValue = arr[0];				　　var maxValue = arr[0];				　　for (i = 1; i < arr.length; i++) {					　　　　if (arr[i] < minValue) {						　　　　　　minValue = arr[i]; // 输入数据的最小值					　　　　} else if (arr[i] > maxValue) {						　　　　　　maxValue = arr[i]; // 输入数据的最大值					　　　　}				　　}				　　// 桶的初始化				　　var DEFAULT_BUCKET_SIZE = 5; // 设置桶的默认数量为5				　　bucketSize = bucketSize || DEFAULT_BUCKET_SIZE;				　　var bucketCount = Math.floor((maxValue - minValue) / bucketSize) + 1;				　　var buckets = new Array(bucketCount);				　　for (i = 0; i < buckets.length; i++) {					　　　　buckets[i] = [];				　　}				　　// 利用映射函数将数据分配到各个桶中				　　for (i = 0; i < arr.length; i++) {					　　　　buckets[Math.floor((arr[i] - minValue) / bucketSize)].push(arr[i]);				　　}				　　arr.length = 0;				　　for (i = 0; i < buckets.length; i++) {					　　　　insertionSort(buckets[i]); // 对每个桶进行排序，这里使用了插入排序					　　　　for (var j = 0; j < buckets[i].length; j++) {						　　　　　　arr.push(buckets[i][j]);					　　　　}				　　}				　　return arr;			}			function insertionSort(array) {				　　for (let begin = 1;begin < array.length;begin++) {					　　　　let cur = begin;					　　　　let v = array[cur];					　　　　while(cur > 0 && v < array[cur -1]){						　　　　　　array[cur] = array[cur - 1];						　　　　　　cur--;					　　　　}					　　　　array[cur] = v;				　　}				　　return array;			}
    function randomArray(start,end){	　　var a=[],o={},random,step=end-start;	　　while(a.length<step){			　　　　random=start+parseInt(Math.random()*step);			　　　　if(!o["x"+random]){					　　　　　　a.push(random);					　　　　　　o["x"+random]=1;				　　　　};		　　};	　　return a;};
